"""
视频混剪系统专用设计系统

参考剪映、Premiere Pro、DaVinci Resolve等专业视频编辑软件的设计理念
专为视频编辑场景优化的UI规范
"""

import tkinter as tk
from tkinter import ttk


class VideoEditingDesignSystem:
    """视频混剪系统设计系统"""
    
    # 🎬 视频编辑专用配色系统
    COLORS = {
        # 主色调 - 专业视频编辑深色主题
        'primary': '#FF6B35',           # 剪映橙 - 主要强调色
        'primary_dark': '#E55A2B',      # 深橙色
        'primary_light': '#FF8A5C',     # 浅橙色
        'primary_hover': '#FF7A47',     # 悬停橙色
        
        # 视频编辑专用深色背景
        'bg_primary': '#1A1A1A',        # 主背景 - 深灰黑
        'bg_secondary': '#2A2A2A',      # 次背景 - 中深灰
        'bg_tertiary': '#3A3A3A',       # 三级背景 - 浅深灰
        'bg_panel': '#252525',          # 面板背景
        'bg_timeline': '#1E1E1E',       # 时间轴背景
        'bg_preview': '#000000',        # 预览区背景 - 纯黑
        
        # 视频编辑功能色彩
        'video_track': '#4A90E2',       # 视频轨道蓝
        'audio_track': '#7ED321',       # 音频轨道绿
        'text_track': '#F5A623',        # 文字轨道黄
        'effect_track': '#BD10E0',      # 特效轨道紫
        'transition': '#50E3C2',        # 转场青色
        
        # 状态色彩 - 视频编辑专用
        'success': '#7ED321',           # 成功绿 - 渲染完成
        'warning': '#F5A623',           # 警告黄 - 需要注意
        'error': '#D0021B',             # 错误红 - 渲染失败
        'info': '#4A90E2',              # 信息蓝 - 提示信息
        'processing': '#BD10E0',        # 处理中紫 - 正在渲染
        
        # 文字色彩 - 深色主题优化
        'text_primary': '#FFFFFF',      # 主文字 - 纯白
        'text_secondary': '#CCCCCC',    # 次文字 - 浅灰
        'text_muted': '#999999',        # 弱化文字 - 中灰
        'text_disabled': '#666666',     # 禁用文字 - 深灰
        'text_accent': '#FF6B35',       # 强调文字 - 橙色
        
        # 边框和分割线
        'border_primary': '#404040',    # 主边框
        'border_secondary': '#333333',  # 次边框
        'border_accent': '#FF6B35',     # 强调边框
        'divider': '#2A2A2A',          # 分割线
        
        # 时间轴专用色彩
        'timeline_ruler': '#555555',    # 时间轴标尺
        'timeline_cursor': '#FF6B35',   # 播放头
        'timeline_selection': '#4A90E2', # 选中区域
        'timeline_marker': '#F5A623',   # 标记点
        
        # 按钮状态色彩
        'btn_normal': '#404040',        # 按钮常规
        'btn_hover': '#505050',         # 按钮悬停
        'btn_active': '#FF6B35',        # 按钮激活
        'btn_disabled': '#2A2A2A',      # 按钮禁用
        
        # 素材库专用色彩
        'media_video': '#4A90E2',       # 视频素材
        'media_audio': '#7ED321',       # 音频素材
        'media_image': '#F5A623',       # 图片素材
        'media_text': '#BD10E0',        # 文字素材
        'media_effect': '#50E3C2',      # 特效素材
    }
    
    # 📝 视频编辑专用字体系统
    FONTS = {
        # 字体族 - 专业编辑软件常用
        'family_primary': 'Microsoft YaHei',    # 主字体
        'family_ui': 'Segoe UI',                # UI字体
        'family_mono': 'Consolas',              # 等宽字体 - 时间码
        'family_timeline': 'Arial',             # 时间轴字体
        
        # 字体大小 - 视频编辑界面优化
        'size_xs': 9,           # 时间码、标签
        'size_sm': 10,          # 小按钮、提示
        'size_base': 11,        # 基础文字
        'size_md': 12,          # 面板标题
        'size_lg': 14,          # 主要标题
        'size_xl': 16,          # 页面标题
        'size_timeline': 9,     # 时间轴文字
        'size_timecode': 12,    # 时间码显示
        
        # 组合字体样式
        'title_main': ('Microsoft YaHei', 16, 'bold'),      # 主标题
        'title_panel': ('Microsoft YaHei', 14, 'bold'),     # 面板标题
        'title_section': ('Microsoft YaHei', 12, 'bold'),   # 区块标题
        'body': ('Microsoft YaHei', 11, 'normal'),          # 正文
        'body_small': ('Microsoft YaHei', 10, 'normal'),    # 小正文
        'button': ('Microsoft YaHei', 11, 'normal'),        # 按钮
        'timeline': ('Arial', 9, 'normal'),                 # 时间轴
        'timecode': ('Consolas', 12, 'normal'),            # 时间码
        'tooltip': ('Microsoft YaHei', 9, 'normal'),        # 工具提示
    }
    
    # 📏 视频编辑专用间距系统
    SPACING = {
        # 基础间距 - 4px网格
        'xs': 2,        # 极小间距 - 时间轴刻度
        'sm': 4,        # 小间距 - 按钮间距
        'md': 8,        # 中间距 - 面板间距
        'lg': 12,       # 大间距 - 区块间距
        'xl': 16,       # 特大间距 - 主要区域
        'xxl': 20,      # 超大间距 - 页面边距
        
        # 视频编辑专用间距
        'timeline_track': 32,       # 轨道高度
        'timeline_padding': 8,      # 时间轴内边距
        'panel_padding': 12,        # 面板内边距
        'toolbar_padding': 8,       # 工具栏内边距
        'preview_margin': 16,       # 预览区边距
        'media_item_spacing': 4,    # 素材项间距
        'button_spacing': 6,        # 按钮间距
    }
    
    # 🔲 视频编辑专用尺寸系统
    SIZES = {
        # 按钮尺寸 - 视频编辑优化
        'btn_small': (24, 24),      # 小按钮 - 工具栏
        'btn_medium': (32, 32),     # 中按钮 - 主要操作
        'btn_large': (40, 40),      # 大按钮 - 播放控制
        'btn_timeline': (20, 20),   # 时间轴按钮
        
        # 面板尺寸
        'panel_min_width': 200,     # 面板最小宽度
        'panel_max_width': 400,     # 面板最大宽度
        'timeline_height': 200,     # 时间轴高度
        'preview_min_size': (320, 180),  # 预览区最小尺寸
        
        # 轨道尺寸
        'track_height': 32,         # 轨道高度
        'track_header_width': 120,  # 轨道标题宽度
        'timeline_ruler_height': 24, # 时间轴标尺高度
        
        # 素材项尺寸
        'media_thumbnail': (60, 40), # 素材缩略图
        'media_item_height': 80,     # 素材项高度
        
        # 边框圆角 - 现代化但不过度
        'radius_small': 2,          # 小圆角
        'radius_medium': 4,         # 中圆角
        'radius_large': 6,          # 大圆角
        'radius_button': 3,         # 按钮圆角
    }
    
    # 🎭 视频编辑专用样式配置
    @classmethod
    def configure_styles(cls):
        """配置视频编辑专用样式"""
        style = ttk.Style()
        
        # 配置主题
        style.theme_use('clam')  # 使用clam主题作为基础
        
        # 全局样式配置
        cls._configure_global_styles(style)
        cls._configure_button_styles(style)
        cls._configure_frame_styles(style)
        cls._configure_label_styles(style)
        cls._configure_entry_styles(style)
        cls._configure_treeview_styles(style)
        cls._configure_notebook_styles(style)
        cls._configure_progressbar_styles(style)
        
        return style
    
    @classmethod
    def _configure_global_styles(cls, style: ttk.Style):
        """配置全局样式"""
        # 根窗口样式
        style.configure('.',
                       background=cls.COLORS['bg_primary'],
                       foreground=cls.COLORS['text_primary'],
                       font=cls.FONTS['body'])
        
        # 框架样式
        style.configure('TFrame',
                       background=cls.COLORS['bg_primary'],
                       relief='flat',
                       borderwidth=0)
        
        # 标签样式
        style.configure('TLabel',
                       background=cls.COLORS['bg_primary'],
                       foreground=cls.COLORS['text_primary'],
                       font=cls.FONTS['body'])
    
    @classmethod
    def _configure_button_styles(cls, style: ttk.Style):
        """配置按钮样式"""
        # 主要按钮 - 剪映橙色
        style.configure('Primary.TButton',
                       background=cls.COLORS['primary'],
                       foreground=cls.COLORS['text_primary'],
                       borderwidth=0,
                       relief='flat',
                       focuscolor='none',
                       font=cls.FONTS['button'],
                       padding=(cls.SPACING['md'], cls.SPACING['sm']))
        
        style.map('Primary.TButton',
                 background=[('active', cls.COLORS['primary_hover']),
                           ('pressed', cls.COLORS['primary_dark'])])
        
        # 次要按钮 - 深色主题
        style.configure('Secondary.TButton',
                       background=cls.COLORS['btn_normal'],
                       foreground=cls.COLORS['text_primary'],
                       borderwidth=1,
                       relief='flat',
                       focuscolor='none',
                       font=cls.FONTS['button'],
                       padding=(cls.SPACING['md'], cls.SPACING['sm']))
        
        style.map('Secondary.TButton',
                 background=[('active', cls.COLORS['btn_hover']),
                           ('pressed', cls.COLORS['btn_active'])])
        
        # 工具栏按钮
        style.configure('Toolbar.TButton',
                       background=cls.COLORS['bg_secondary'],
                       foreground=cls.COLORS['text_primary'],
                       borderwidth=0,
                       relief='flat',
                       focuscolor='none',
                       font=cls.FONTS['body_small'],
                       padding=(cls.SPACING['sm'], cls.SPACING['sm']))
        
        # 播放控制按钮
        style.configure('PlayControl.TButton',
                       background=cls.COLORS['btn_normal'],
                       foreground=cls.COLORS['text_primary'],
                       borderwidth=0,
                       relief='flat',
                       focuscolor='none',
                       font=cls.FONTS['button'],
                       padding=(cls.SPACING['lg'], cls.SPACING['md']))
    
    @classmethod
    def _configure_frame_styles(cls, style: ttk.Style):
        """配置框架样式"""
        # 面板框架
        style.configure('Panel.TFrame',
                       background=cls.COLORS['bg_panel'],
                       relief='flat',
                       borderwidth=1)
        
        # 时间轴框架
        style.configure('Timeline.TFrame',
                       background=cls.COLORS['bg_timeline'],
                       relief='flat',
                       borderwidth=0)
        
        # 预览框架
        style.configure('Preview.TFrame',
                       background=cls.COLORS['bg_preview'],
                       relief='flat',
                       borderwidth=1)
        
        # 工具栏框架
        style.configure('Toolbar.TFrame',
                       background=cls.COLORS['bg_secondary'],
                       relief='flat',
                       borderwidth=0)
    
    @classmethod
    def _configure_label_styles(cls, style: ttk.Style):
        """配置标签样式"""
        # 面板标题
        style.configure('PanelTitle.TLabel',
                       background=cls.COLORS['bg_panel'],
                       foreground=cls.COLORS['text_primary'],
                       font=cls.FONTS['title_panel'])
        
        # 时间码标签
        style.configure('Timecode.TLabel',
                       background=cls.COLORS['bg_timeline'],
                       foreground=cls.COLORS['text_primary'],
                       font=cls.FONTS['timecode'])
        
        # 弱化标签
        style.configure('Muted.TLabel',
                       background=cls.COLORS['bg_primary'],
                       foreground=cls.COLORS['text_muted'],
                       font=cls.FONTS['body_small'])
        
        # 强调标签
        style.configure('Accent.TLabel',
                       background=cls.COLORS['bg_primary'],
                       foreground=cls.COLORS['text_accent'],
                       font=cls.FONTS['body'])
    
    @classmethod
    def _configure_entry_styles(cls, style: ttk.Style):
        """配置输入框样式"""
        style.configure('TEntry',
                       fieldbackground=cls.COLORS['bg_secondary'],
                       foreground=cls.COLORS['text_primary'],
                       borderwidth=1,
                       relief='flat',
                       insertcolor=cls.COLORS['text_primary'])
    
    @classmethod
    def _configure_treeview_styles(cls, style: ttk.Style):
        """配置树形视图样式"""
        style.configure('Treeview',
                       background=cls.COLORS['bg_secondary'],
                       foreground=cls.COLORS['text_primary'],
                       fieldbackground=cls.COLORS['bg_secondary'],
                       borderwidth=0,
                       relief='flat')
        
        style.configure('Treeview.Heading',
                       background=cls.COLORS['bg_tertiary'],
                       foreground=cls.COLORS['text_primary'],
                       relief='flat',
                       borderwidth=1)
    
    @classmethod
    def _configure_notebook_styles(cls, style: ttk.Style):
        """配置标签页样式"""
        style.configure('TNotebook',
                       background=cls.COLORS['bg_primary'],
                       borderwidth=0)
        
        style.configure('TNotebook.Tab',
                       background=cls.COLORS['bg_secondary'],
                       foreground=cls.COLORS['text_primary'],
                       padding=(cls.SPACING['md'], cls.SPACING['sm']),
                       borderwidth=0)
        
        style.map('TNotebook.Tab',
                 background=[('selected', cls.COLORS['bg_tertiary']),
                           ('active', cls.COLORS['btn_hover'])])
    
    @classmethod
    def _configure_progressbar_styles(cls, style: ttk.Style):
        """配置进度条样式"""
        style.configure('TProgressbar',
                       background=cls.COLORS['primary'],
                       troughcolor=cls.COLORS['bg_secondary'],
                       borderwidth=0,
                       relief='flat')


# 🛠️ 视频编辑专用组件创建函数
def create_video_button(parent, text, command=None, style='Primary'):
    """创建视频编辑专用按钮"""
    return ttk.Button(parent, text=text, command=command, style=f'{style}.TButton')

def create_toolbar_button(parent, text, command=None):
    """创建工具栏按钮"""
    return ttk.Button(parent, text=text, command=command, style='Toolbar.TButton')

def create_play_control_button(parent, text, command=None):
    """创建播放控制按钮"""
    return ttk.Button(parent, text=text, command=command, style='PlayControl.TButton')

def create_panel_frame(parent, title=None):
    """创建面板框架"""
    frame = ttk.Frame(parent, style='Panel.TFrame', padding=VideoEditingDesignSystem.SPACING['panel_padding'])
    
    if title:
        title_label = ttk.Label(frame, text=title, style='PanelTitle.TLabel')
        title_label.pack(anchor='w', pady=(0, VideoEditingDesignSystem.SPACING['sm']))
    
    return frame

def create_timeline_frame(parent):
    """创建时间轴框架"""
    return ttk.Frame(parent, style='Timeline.TFrame')

def create_preview_frame(parent):
    """创建预览框架"""
    return ttk.Frame(parent, style='Preview.TFrame')

def create_toolbar_frame(parent):
    """创建工具栏框架"""
    return ttk.Frame(parent, style='Toolbar.TFrame', padding=VideoEditingDesignSystem.SPACING['toolbar_padding'])
